Mapping underserved and overburdened communities

Under the new Equity Strategy, our goal is to ensure at least 40% of the benefits from TBEP activities are directed to underserved communities (see Mapping underserved communities). Many of these underserved communities are also disproportionately burdened by pollution, expected impacts from climate change, and lack of green space. Understanding which communities face different burdens can help TBEP prioritize different activities to help mitigate or reduce the burdens facing these communities.

Below, we have provided instructions for replicating our methodology for mapping underserved and overburdened communities in Tampa Bay. To view instructions for downloading the necessary source data, as well as an overview of the environmental justice metrics we consider, see Getting environmental justice data.

While we encourage other National Estuary Programs to adopt our methodology in their own Equity Strategies, we recognize that different approaches may be necessary in different areas. If you have questions or other feedback regarding the methodology, contact Dr. Blake Simmons at bsimmons@tbep.org.

The method described below is presented in R coding language, but users who prefer working with GIS software (e.g., ArcGIS or QGIS) should also be able to reproduce the maps by following along in the descriptions of each step and using analogous GIS tools.

Load the required R packages (install first as needed).

library(sf)
library(mapview)
library(dplyr)
library(RColorBrewer)
library(leafsync)

Load the map of underserved communities in Tampa Bay made in the previous page. Map the number of burdens facing underserved communities across the watershed.

load(file = 'data/dattbunderover.RData')

mapview(dattbunderover, zcol = "thresholdEJ_N", col.regions = brewer.pal(8, "YlOrRd"), layer.name = "No. of Burdens")

View the underserved tracts that also meet our definition of overburdened communities. The areas in red are those that rank in the 80th percentile (or greater) nationally in one or more of the environmental justice screening variables.

mapview(dattbunderover, zcol = "overburdened", col.regions = list("gray","red"), layer.name = "Overburdened")

You can see that all but 3 underserved tracts in our watershed are also considered overburdened by one or more EJ issue. Run the code below to create a field listing the major EJ issues facing each community, which you can view in the map by hovering your cursor over a tract.

dattbunderover <- dattbunderover %>%
  mutate(CC = ifelse(thresholdEJ_agloss == 1 | thresholdEJ_floodr == 1, "Climate Change", NA),
         NP = ifelse(thresholdEJ_greens == 1, "Nature Deprevation", NA),
         AP = ifelse(thresholdEJ_pm2.5 == 1 | thresholdEJ_trafic == 1, "Air Pollution", NA),
         WP = ifelse(thresholdEJ_wastew == 1, "Water Pollution", NA),
         OP = ifelse(thresholdEJ_hwaste == 1 | thresholdEJ_ugtank == 1 | thresholdEJ_sfunds == 1 | thresholdEJ_bfield == 1 | thresholdEJ_phmine == 1, "Other Pollution", NA),
         LE = ifelse(thresholdEJ_redlin == 1, "Legacy Effects", NA)) %>%
  mutate(EJissues1 = paste(CC, NP, AP, WP, OP, LE, sep = ", ")) %>%
  mutate(EJissues1 = gsub('NA, ', '', EJissues1)) %>%
  mutate(EJissues1 = gsub(', NA', '', EJissues1))

mapview(dattbunderover, zcol = "thresholdEJ_N", col.regions = brewer.pal(8, "YlOrRd"), label = "EJissues1", layer.name = "No. of Burdens")

Run the code below to create another field listing the specific EJ issues facing each community. Hover over the tracts to see the changes.

dattbunderover <- dattbunderover %>%
  mutate(agloss = ifelse(thresholdEJ_agloss == 1, "Agriculture loss", NA),
         floodr = ifelse(thresholdEJ_floodr == 1, "Flood risk", NA),
         greens = ifelse(thresholdEJ_greens == 1, "Lack of green space", NA),
         pm2.5 = ifelse(thresholdEJ_pm2.5 == 1, "PM2.5", NA),
         trafic = ifelse(thresholdEJ_trafic == 1, "Traffic volume", NA),
         wastew = ifelse(thresholdEJ_wastew == 1, "Wastewater discharge", NA),
         hwaste = ifelse(thresholdEJ_hwaste == 1, "Hazardous waste facilities", NA),
         ugtank = ifelse(thresholdEJ_ugtank == 1, "Underground storage tanks", NA),
         sfunds = ifelse(thresholdEJ_sfunds == 1, "Superfund sites", NA),
         bfield = ifelse(thresholdEJ_bfield == 1, "Brownfield sites", NA),
         phmine = ifelse(thresholdEJ_phmine == 1, "Phosphate mining", NA),
         redlin = ifelse(thresholdEJ_redlin == 1, "Historic redlining", NA)) %>%
  mutate(EJissues1.1 = paste(agloss, floodr, greens, pm2.5, trafic, wastew, hwaste, ugtank, sfunds, bfield, phmine, redlin, sep = ", ")) %>%
  mutate(EJissues1.1 = gsub('NA, ', '', EJissues1.1)) %>%
  mutate(EJissues1.1 = gsub(', NA', '', EJissues1.1))

mapview(dattbunderover, zcol = "thresholdEJ_N", col.regions = brewer.pal(8, "YlOrRd"), label = "EJissues1.1", layer.name = "No. of Burdens")

You can also use this data to compare underserved communities facing different EJ challenges. The code below allows you to compare locations of communities with 4 different burdens at once.

map_flood <- dattbunderover %>%
  filter(thresholdEJ_floodr == 1) %>%
  mapview(zcol = "floodr", col.regions = "blue", layer.name = "Burden")

map_wastew <- dattbunderover %>%
  filter(thresholdEJ_wastew == 1) %>%
  mapview(zcol = "wastew", col.regions = "black", layer.name = "Burden")

map_greens <- dattbunderover %>%
  filter(thresholdEJ_greens == 1) %>%
  mapview(zcol = "greens", col.regions = "green", layer.name = "Burden")

map_bfield <- dattbunderover %>%
  filter(thresholdEJ_bfield == 1) %>%
  mapview(zcol = "bfield", col.regions = "brown", layer.name = "Burden")

sync(map_flood, map_wastew, map_greens, map_bfield)

We have saved this final layer as an RData object for internal and external use. This will serve as the primary data guiding our Equity Strategy, and external parties are free to download this data for their own use.

# save the layer as an RData object
dattbequity <- dattbunderover %>%
  rowwise() %>%
  select(matches('^threshold|^ID|^under|^over|^EJissues'))


save(dattbunderover, file = 'data/dattbequity.RData')